Exploiting exact-match cache rules for web cache deception
Web cache deception con reglas de caché exact-match: ; y ? actúan como delimitadores y el cache server resuelve path traversal, cacheando /my-account bajo /robots.txt.
Target Overview & Vulnerability Summary
El objetivo es cambiar el email del usuario administrator. El cache server usa reglas de caché de tipo exact-match sobre paths concretos (/robots.txt), mientras que el origin server trata ; y ? como delimitadores. El cache server, además, normaliza secuencias de path traversal. La URL /my-account;%2f%2e%2e%2frobots.txt hace que el origin sirva /my-account y que el cache server lo guarde bajo la clave cacheable /robots.txt.
| Campo | Valor |
|---|---|
| Severidad | Alta (mutación de estado autenticado vía caché — cache poisoning del flujo) |
| Endpoint vulnerable | /my-account (cacheado bajo /robots.txt) |
| Root cause | Reglas de caché exact-match + delimitadores (;, ?) y normalización de path traversal divergentes entre cache y origin |
Credenciales del laboratorio: wiener:peter. Se dispone de una lista de caracteres delimitadores.
Technical Breakdown & Exploitation Flow
1. Reconocimiento de delimitadores y normalización
- Delimitadores: probando con
;y?se confirma que ambos funcionan como delimitadores para el origin:/my-account;anythingo/my-account?anythingsiguen resolviendo/my-account. - Normalización en caché: al recuperar un asset estático con una secuencia de path traversal, el cache server la resuelve y cachea el resultado. Con
GET /asdf/..%2ffavicon.icola caché normaliza a/favicon.ico. Esto no funciona con recursos dinámicos como/my-accountde forma directa, pero sí combinando delimitador + traversal.
2. La request deceptiva
GET /my-account;%2f%2e%2e%2frobots.txt HTTP/2
Host: <LAB-ID>.web-security-academy.net
Cookie: session=<SESSION_ID>
Comportamiento:
- Cache server: decodifica
%2f→/,%2e%2e→.., y resuelve la secuencia de path traversal:/my-account;/../robots.txt→/robots.txt. El path final coincide con la regla exact-match de/robots.txt, que es cacheable, y guarda la respuesta bajo esa clave. - Origin server: usa
;como delimitador, ignora;%2f%2e%2e%2frobots.txty sirve la página real/my-account— con el formulario de cambio de email (y su CSRF token) del usuario autenticado.
3. Explotación
- Entregar
https://<LAB-ID>.web-security-academy.net/my-account;%2f%2e%2e%2frobots.txtal usuarioadministrator(p. ej. vía el exploit server). - El origin responde con la página de
/my-accountdeadministrator; el cache server la guarda bajo/robots.txt. - El atacante consulta
GET /robots.txt(o la clave cacheada) y obtiene el HTML de la cuenta del administrador, incluido el formulario con el token CSRF. - Con el CSRF token válido y el email objetivo, se envía
POST /my-account/change-emailconemail=<attacker>completando la mutación.
Root Cause Analysis
Dos discrepancias se combinan:
- Delimitadores de path: el origin server acepta
;(y?) como separadores, por lo que el path efectivo es/my-account. El cache server no conoce esa semántica y trata la cadena completa como un único path. - Normalización + exact-match: el cache server resuelve la secuencia de traversal y la normaliza a
/robots.txt, un path con regla de caché exact-match.
El resultado es que una página dinámica autenticada se clasifica como un asset estático cacheable. La regla exact-match (robots.txt) se convierte en la puerta de entrada para almacenar y leer contenido ajeno.
Secure Remediation
- Rechazar en el origen los caracteres que actúan como delimitadores no estándar (
;) o normalizar de forma idéntica en ambas capas. - No aplicar reglas de caché exact-match sin validar que el path no contenga secuencias de traversal ni delimitadores; el cache key debe normalizarse con la misma lógica que el origin.
- Marcar como
Cache-Control: private, no-storetodas las respuestas que contienen cookies de sesión, tokens CSRF o datos de cuenta. - Rechazar o descartar requests cuyo path contenga parámetros de ruta (
;) en endpoints sensibles.